home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / documents / RFC / rfc1134.txt < prev    next >
Text File  |  1994-08-01  |  85KB  |  2,131 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                         D. Perkins
  8. Request for Comments: 1134                                           CMU
  9.                                                            November 1989
  10.  
  11.  
  12.        The Point-to-Point Protocol: A Proposal for Multi-Protocol
  13.           Transmission of Datagrams Over Point-to-Point Links
  14.  
  15.  
  16.                            Table of Contents
  17.  
  18.    Status of this Memo ...................................    2
  19.    Abstract ..............................................    2
  20.    1. Introduction .......................................    2
  21.    1.1 Motivation ........................................    2
  22.    1.2 Overview of PPP ...................................    3
  23.    1.3 Organization of the document ......................    4
  24.    2. Physical Layer Requirements ........................    4
  25.    3. The Data Link Layer ................................    4
  26.    3.1 Frame Format ......................................    5
  27.    4. The PPP Link Control Protocol (LCP) ................    8
  28.    4.1 The LCP Automaton .................................    9
  29.    4.1.1 Overview ........................................    9
  30.    4.1.2 State Diagram ...................................   10
  31.    4.1.3 State Transition Table ..........................   12
  32.    4.1.4 Events ..........................................   12
  33.    4.1.5 Actions .........................................   14
  34.    4.1.6 States ..........................................   16
  35.    4.2 Loop Avoidance ....................................   19
  36.    4.3 Packet Format .....................................   19
  37.    4.3.1 Configure-Request ...............................   21
  38.    4.3.2 Configure-Ack ...................................   21
  39.    4.3.3 Configure-Nak ...................................   22
  40.    4.3.4 Configure-Reject ................................   24
  41.    4.3.5 Terminate-Request and Terminate-Ack .............   25
  42.    4.3.6 Code-Reject .....................................   26
  43.    4.3.7 Protocol-Reject .................................   27
  44.    4.3.8 Echo-Request and Echo-Reply .....................   28
  45.    4.3.9 Discard-Request .................................   29
  46.    4.4 Configuration Options .............................   30
  47.    4.4.1 Format ..........................................   31
  48.    5. A PPP Network Control Protocol (NCP) for IP ........   32
  49.    5.1 Sending IP Datagrams ..............................   33
  50.    APPENDICES ............................................   33
  51.    A. Asynchronous HDLC ..................................   33
  52.    B. Fast Frame Check Sequence (FCS) Implementation .....   35
  53.    B.1 FCS Computation Method ............................   35
  54.    B.2 Fast FCS table generator ..........................   36
  55.  
  56.  
  57.  
  58. Perkins                                                         [Page 1]
  59.  
  60. RFC 1134                          PPP                      November 1989
  61.  
  62.  
  63.    REFERENCES ............................................   37
  64.    AUTHOR'S ADDRESS ......................................   38
  65.  
  66. Status of this Memo
  67.  
  68.    This memo defines a proposed protocol for the Internet community.
  69.  
  70.    This proposal is the product of the Point-to-Point Protocol Working
  71.    Group of the Internet Engineering Task Force (IETF).  Comments on this
  72.    memo should be submitted to the IETF Point-to-Point Protocol Working
  73.    Group chair by January 15, 1990.  Comments will be reviewed at the
  74.    February 1990 IETF meeting, with the goal of advancing PPP to draft
  75.    standard status.  Distribution of this memo is unlimited.
  76.  
  77. Abstract
  78.  
  79.    The Point-to-Point Protocol (PPP) provides a method for transmitting
  80.    datagrams over serial point-to-point links.  PPP is composed of three
  81.    parts:
  82.  
  83.       1. A method for encapsulating datagrams over serial links.
  84.  
  85.       2. An extensible Link Control Protocol (LCP).
  86.  
  87.       3. A family of Network Control Protocols (NCP) for establishing
  88.          and configuring different network-layer protocols.
  89.  
  90.    This document defines the encapsulation scheme, the basic LCP, and an
  91.    NCP for establishing and configuring the Internet Protocol (IP)
  92.    (called the IP Control Protocol, IPCP).
  93.  
  94.    The options and facilities used by the LCP and the IPCP are defined
  95.    in separate documents.  Control protocols for configuring and
  96.    utilizing other network-layer protocols besides IP (e.g., DECNET,
  97.    OSI) are expected to be developed as needed.
  98.  
  99. 1.  Introduction
  100.  
  101. 1.1.  Motivation
  102.  
  103.    In the last few years, the Internet has seen explosive growth in the
  104.    number of hosts supporting TCP/IP.  The vast majority of these hosts
  105.    are connected to Local Area Networks (LANs) of various types,
  106.    Ethernet being the most common.  Most of the other hosts are
  107.    connected through Wide Area Networks (WANs) such as X.25 style Public
  108.    Data Networks (PDNs).  Relatively few of these hosts are connected
  109.    with simple point-to-point (i.e., serial) links.  Yet, point-to-point
  110.    links are among the oldest methods of data communications and almost
  111.  
  112.  
  113.  
  114. Perkins                                                         [Page 2]
  115.  
  116. RFC 1134                          PPP                      November 1989
  117.  
  118.  
  119.    every host supports point-to-point connections.  For example,
  120.    asynchronous RS-232-C [1] interfaces are essentially ubiquitous.
  121.  
  122.    One reason for the small number of point-to-point IP links is the
  123.    lack of a standard encapsulation protocol.  There are plenty of non-
  124.    standard (and at least one defacto standard) encapsulation protocols
  125.    available, but there is not one which has been agreed upon as an
  126.    Internet Standard.  By contrast, standard encapsulation schemes do
  127.    exist for the transmission of datagrams over most popular LANs.
  128.  
  129.    One purpose of this memo is to remedy this problem.  But even more
  130.    importantly, the Point-to-Point Protocol proposes more than just an
  131.    encapsulation scheme.  Point-to-Point links tend to exacerbate many
  132.    problems with the current family of network protocols.  For instance,
  133.    assignment and management of IP addresses, which is a problem even in
  134.    LAN environments, is especially difficult over switched point-to-
  135.    point circuits (e.g., dialups).
  136.  
  137.    Some additional issues addressed by PPP include asynchronous
  138.    (start/stop) and bit-oriented synchronous encapsulation, network
  139.    protocol multiplexing, link configuration, link quality testing,
  140.    error detection, and option negotiation for such capabilities as
  141.    network-layer address negotiation and data compression negotiation.
  142.  
  143.    PPP addresses these issues by providing an extensible Link Control
  144.    Protocol (LCP) and a family of Network Control Protocols (NCP) to
  145.    negotiate optional configuration parameters and facilities.
  146.  
  147. 1.2.  Overview of PPP
  148.  
  149.    PPP has three main components:
  150.  
  151.       1. A method for encapsulating datagrams over serial links.  PPP
  152.          uses HDLC as a basis for encapsulating datagrams over point-
  153.          to-point links.
  154.  
  155.       2. An extensible Link Control Protocol (LCP) to establish,
  156.          configure, and test the data-link connection.
  157.  
  158.       3. A family of Network Control Protocols (NCP) for establishing
  159.          and configuring different network-layer protocols.  PPP is
  160.          designed to allow the simultaneous use of multiple network-
  161.          layer protocols.
  162.  
  163.    In order to establish communications over a point-to-point link, the
  164.    originating PPP would first send LCP packets to configure and test
  165.    the data link.  After the link has been establish and optional
  166.    facilities have been negotiated as needed by the LCP, the originating
  167.  
  168.  
  169.  
  170. Perkins                                                         [Page 3]
  171.  
  172. RFC 1134                          PPP                      November 1989
  173.  
  174.  
  175.    PPP would send NCP packets to choose and configure one or more
  176.    network-layer protocols.  Once each of the chosen network-layer
  177.    protocols has been configured, datagrams from each network-layer
  178.    protocol can be sent over the link.
  179.  
  180.    The link will remain configured for communications until explicit LCP
  181.    or NCP packets close the link down, or until some external event
  182.    occurs (e.g., inactivity timer expires or user intervention).
  183.  
  184. 1.3.  Organization of the document
  185.  
  186.    This memo is divided into several sections.  Section 2 discusses the
  187.    physical-layer requirements of PPP.  Section 3 describes the Data
  188.    Link Layer including the PPP frame format and data link encapsulation
  189.    scheme.  Section 4 specifies the LCP including the connection
  190.    establishment and option negotiation procedures.  Section 5 specifies
  191.    the IP Control Protocol (IPCP), which is the NCP for the Internet
  192.    Protocol, and describes the encapsulation of IP datagrams within PPP
  193.    packets.  Appendix A summarizes important features of asynchronous
  194.    HDLC, and Appendix B describes an efficient table-lookup algorithm
  195.    for fast Frame Check Sequence (FCS) computation.
  196.  
  197. 2.  Physical Layer Requirements
  198.  
  199.    The Point-to-Point Protocol is capable of operating across any
  200.    DTE/DCE interface (e.g., EIA RS-232-C, EIA RS-422, EIA RS-423 and
  201.    CCITT V.35).  The only absolute requirement imposed by PPP is the
  202.    provision of a duplex circuit, either dedicated or switched, which
  203.    can operate in either an asynchronous (start/stop) or synchronous
  204.    bit-serial mode, transparent to PPP Data Link Layer frames.  PPP does
  205.    not impose any restrictions regarding transmission rate, other than
  206.    those imposed by the particular DTE/DCE interface in use.
  207.  
  208.    PPP does not require the use of modem control signals, such as
  209.    Request To Send (RTS), Clear To Send (CTS), Data Carrier Detect
  210.    (DCD), and Data Terminal Ready (DTR).  However, using such signals
  211.    when available can allow greater functionality and performance.
  212.  
  213. 3.  The Data Link Layer
  214.  
  215.    The Point-to-Point Protocol uses the principles, terminology, and
  216.    frame structure of the International Organization For
  217.    Standardization's (ISO) High-level Data Link Control (HDLC)
  218.    procedures (ISO 3309-1979 [2]), as modified by ISO 3309:1984/PDAD1
  219.    "Addendum 1: Start/stop transmission" [5].  ISO 3309-1979 specifies
  220.    the HDLC frame structure for use in synchronous environments.  ISO
  221.    3309:1984/PDAD1 specifies proposed modifications to ISO 3309-1979 to
  222.    allow its use in asynchronous environments.
  223.  
  224.  
  225.  
  226. Perkins                                                         [Page 4]
  227.  
  228. RFC 1134                          PPP                      November 1989
  229.  
  230.  
  231.    The PPP control procedures use the definitions and Control field
  232.    encodings standardized in ISO 4335-1979 [3] and ISO 4335-
  233.    1979/Addendum 1-1979 [4].  The PPP frame structure is also consistent
  234.    with CCITT Recommendation X.25 LAPB [6], since that too is based on
  235.    HDLC.
  236.  
  237.       Note: ISO 3309:1984/PDAD1 is a Proposed Draft standard.  At
  238.       present, it seems that ISO 3309:1984/PDAD1 is stable and likely to
  239.       become an International Standard.  Therefore, we feel comfortable
  240.       about using it before it becomes an International Standard.  The
  241.       progress of this proposal should be tracked and encouraged by the
  242.       Internet community.
  243.  
  244.    The purpose of this memo is not to document what is already
  245.    standardized in ISO 3309.  We assume that the reader is already
  246.    familiar with HDLC, or has access to a copy of [2] or [6].  Instead,
  247.    this paper attempts to give a concise summary and point out specific
  248.    options and features used by PPP.  Since "Addendum 1: Start/stop
  249.    transmission", is not yet standardized and widely available, it is
  250.    summarized in Appendix A.
  251.  
  252. 3.1.  Frame Format
  253.  
  254.    A summary of the standard PPP frame structure is shown below.  The
  255.    fields are transmitted from left to right.
  256.  
  257.       +----------+---------+---------+----------+------------
  258.       |   Flag   | Address | Control | Protocol | Information
  259.       | 01111110 | 1111111 | 0000011 | 16 bits  |      *
  260.       +----------+---------+---------+----------+------------
  261.               ---+---------+----------+
  262.                  |   FCS   |   Flag   |
  263.                  | 16 bits | 01111110 |
  264.               ---+---------+----------+
  265.  
  266.    This figure does not include start/stop bits (for asynchronous links)
  267.    or any bits or octets inserted for transparency.  When asynchronous
  268.    links are used, all octets are transmitted with one start bit, eight
  269.    bits of data, and one stop bit.  There is no provision in either PPP
  270.    or ISO 3309:1984/PDAD1 for seven bit asynchronous links.
  271.  
  272.    To remain consistent with standard Internet practice, and avoid
  273.    confusion for people used to reading RFCs, all binary numbers in the
  274.    following descriptions are in Most Significant Bit to Least
  275.    Significant Bit order, reading from left to right, unless otherwise
  276.    indicated.  Note that this is contrary to standard ISO and CCITT
  277.    practice which orders bits as transmitted (i.e., network bit order).
  278.    Keep this in mind when comparing this document with the international
  279.  
  280.  
  281.  
  282. Perkins                                                         [Page 5]
  283.  
  284. RFC 1134                          PPP                      November 1989
  285.  
  286.  
  287.    standards documents.
  288.  
  289.    Flag Sequence
  290.  
  291.       The Flag Sequence is a single octet and indicates the beginning or
  292.       end of a frame.  The Flag Sequence consists of the binary sequence
  293.       01111110 (hexadecimal 0x7e).
  294.  
  295.    Address Field
  296.  
  297.       The Address field is a single octet and contains the binary
  298.       sequence 11111111 (hexadecimal 0xff), the All-Stations address.
  299.       PPP does not assign individual station addresses.  The All-
  300.       Stations address should always be recognized and received.  Frames
  301.       with other Addresses should be silently discarded.
  302.  
  303.    Control Field
  304.  
  305.       The Control field is a single octet and contains the binary
  306.       sequence 00000011 (hexadecimal 0x03), the Unnumbered Information
  307.       (UI) command with the P/F bit is set to zero.  Frames with other
  308.       Control field values should be silently discarded.
  309.  
  310.    Protocol Field
  311.  
  312.       The Protocol field is two octets and its value identifies the
  313.       protocol encapsulated in the Information field of the frame.  The
  314.       most up-to-date values of the Protocol field are specified in the
  315.       most recent "Assigned Numbers" RFC [11].  Initial values are also
  316.       listed below.
  317.  
  318.       Protocol field values in the "cxxx" range identify datagrams as
  319.       belonging to the Link Control Protocol (LCP) or associated
  320.       protocols.  Values in the "8xxx" range identify datagrams belonging
  321.       to the family of Network Control Protocols (NCP).  Values in the
  322.       "0xxx" range identify the network protocol of specific datagrams.
  323.  
  324.       This Protocol field is defined by PPP and is not a field defined
  325.       by HDLC.  However, the Protocol field is consistent with the ISO
  326.       3309 extension mechanism for Address fields.  All Protocols MUST be
  327.       odd; the least significant bit of the least significant octet MUST
  328.       equal "1".  Also, all Protocols MUST be assigned such that the
  329.       least significant bit of the most significant octet equals "0".
  330.       Frames received which don't comply with these rules should be
  331.       considered as having an unrecognized Protocol, and should be
  332.       handled as specified by the LCP.  The Protocol field is
  333.       transmitted and received most significant octet first.
  334.  
  335.  
  336.  
  337.  
  338. Perkins                                                         [Page 6]
  339.  
  340. RFC 1134                          PPP                      November 1989
  341.  
  342.  
  343.       The Protocol field is initially assigned as follows:
  344.  
  345.          Value (in hex)          Protocol
  346.  
  347.          0001 to 001f            reserved (transparency inefficient)
  348.          0021                    Internet Protocol
  349.          0023                  * ISO CLNP
  350.          0025                  * Xerox NS IDP
  351.          0027                  * DECnet Phase IV
  352.          0029                  * Appletalk
  353.          002b                  * Novell IPX
  354.          002d                  * Van Jacobson Compressed TCP/IP 1
  355.          002f                  * Van Jacobson Compressed TCP/IP 2
  356.  
  357.          8021                    Internet Protocol Control Protocol
  358.          8023                  * ISO CLNP Control Protocol
  359.          8025                  * Xerox NS IDP Control Protocol
  360.          8027                  * DECnet Phase IV Control Protocol
  361.          8029                  * Appletalk Control Protocol
  362.          802b                  * Novell IPX Control Protocol
  363.          802d                  * Reserved
  364.          802f                  * Reserved
  365.  
  366.          c021                    Link Control Protocol
  367.          c023                  * User/Password Authentication Protocol
  368.  
  369.             * Reserved for future use; not described in this document.
  370.  
  371.    Information Field
  372.  
  373.       The Information field is zero or more octets.  The Information
  374.       field contains the datagram for the protocol specified in the
  375.       Protocol field.  The end of the Information field is found by
  376.       locating the closing Flag Sequence and allowing two octets for the
  377.       Frame Check Sequence field.  The default maximum length of the
  378.       Information field is 1500 octets.  By prior agreement, consenting
  379.       PPP implementations may use other values for the maximum
  380.       Information field length.
  381.  
  382.       On transmission, the Information field may be padded with an
  383.       arbitrary number of octets up to the maximum length.  It is the
  384.       responsibility of each protocol to disambiguate padding characters
  385.       from real information.
  386.  
  387.    Frame Check Sequence (FCS) Field
  388.  
  389.       The Frame Check Sequence field is normally 16 bits (two octets).
  390.       By prior agreement, consenting PPP implementations may use a 32-
  391.  
  392.  
  393.  
  394. Perkins                                                         [Page 7]
  395.  
  396. RFC 1134                          PPP                      November 1989
  397.  
  398.  
  399.       bit (four-octet) FCS for improved error detection.
  400.  
  401.       The FCS field is calculated over all bits of the Address, Control,
  402.       Protocol and Information fields not including any start and stop
  403.       bits (asynchronous) and any bits (synchronous) or octets
  404.       (asynchronous) inserted for transparency.  This does not include
  405.       the Flag Sequences or FCS field.  The FCS is transmitted with the
  406.       coefficient of the highest term first.
  407.  
  408.       For more information on the specification of the FCS, see ISO 3309
  409.       or CCITT X.25.
  410.  
  411.          Note: A fast, table-driven implementation of the 16-bit FCS
  412.          algorithm is shown in Appendix B.  This implementation is based
  413.          on [7] and [8].
  414.  
  415.    Modifications to the Basic Frame Format
  416.  
  417.       The Link Control Protocol can negotiate modifications to the
  418.       standard PPP frame structure.  However, modified frames will
  419.       always be clearly distinguishable from standard frames.
  420.  
  421. 4.  The PPP Link Control Protocol (LCP)
  422.  
  423.    The Link Control Protocol (LCP) provides a method of establishing,
  424.    configuring, maintaining and terminating the point-to-point
  425.    connection.  LCP goes through four distinct phases:
  426.  
  427.    Phase 1: Link Establishment and Configuration Negotiation
  428.  
  429.       Before any network-layer datagrams (e.g., IP) may be exchanged,
  430.       LCP must first open the connection through an exchange of
  431.       Configure packets.  This exchange is complete, and the Open state
  432.       entered, once a Configure-Ack packet (described below) has been
  433.       both sent and received.  Any non-LCP packets received before this
  434.       exchange is complete are silently discarded.
  435.  
  436.       It is important to note that LCP handles configuration only of the
  437.       link; LCP does not handle configuration of individual network-
  438.       layer protocols.  In particular, all Configuration Parameters
  439.       which are independent of particular network-layer protocols are
  440.       configured by LCP.  All Configuration Options are assumed to be at
  441.       default values unless altered by the configuration exchange.
  442.  
  443.    Phase 2: Link Quality Determination
  444.  
  445.       LCP allows an optional Link Quality Determination phase following
  446.       transition to the LCP Open state.  In this phase, the link is
  447.  
  448.  
  449.  
  450. Perkins                                                         [Page 8]
  451.  
  452. RFC 1134                          PPP                      November 1989
  453.  
  454.  
  455.       tested to determine if the link quality is sufficient to bring up
  456.       network-layer protocols.  This phase is completely optional.  LCP
  457.       may delay transmission of network-layer protocol information until
  458.       this phase is completed.
  459.  
  460.       The procedure for Link Quality Determination is unspecified and
  461.       may vary from implementation to implementation, or because of
  462.       user-configured parameters, but only so long as the procedure
  463.       doesn't violate other aspects of LCP.  One suggested method is to
  464.       use LCP Echo-Request and Echo-Reply packets.
  465.  
  466.       What is important is that this phase may persist for any length of
  467.       time.  Therefore, implementations should avoid fixed timeouts when
  468.       waiting for their peers to advance to phase 3.
  469.  
  470.    Phase 3: Network-Layer Protocol Configuration Negotiation
  471.  
  472.       Once LCP has finished the Link Quality Determination phase,
  473.       network-layer protocols may be separately configured by the
  474.       appropriate Network Control Protocols (NCP), and may be brought up
  475.       and taken down at any time.  If LCP closes the link, it informs
  476.       the network-layer protocols so that they may take appropriate
  477.       action.
  478.  
  479.    Phase 4: Link Termination
  480.  
  481.       LCP may terminate the link at any time.  This will usually be done
  482.       at the request of a human user, but may happen because of a
  483.       physical event such as the loss of carrier, or the expiration of
  484.       an idle-period timer.
  485.  
  486. 4.1.  The LCP Automation
  487.  
  488. 4.1.1.  Overview
  489.  
  490.    LCP is specified by a number of packet formats and a finite-state
  491.    automation.  This section presents an overview of the LCP automation,
  492.    followed by a representation of it as both a state diagram and a
  493.    state transition table.
  494.  
  495.    There are three classes of LCP packets:
  496.  
  497.       1. Link Establishment packets used to establish and configure a
  498.          link, (e.g., Configure-Request, Configure-Ack, Configure-Nak
  499.          and Configure-Reject)
  500.  
  501.       2. Link Termination packets used to terminate a link, (e.g.,
  502.          Terminate-Request and Terminate-Ack)
  503.  
  504.  
  505.  
  506. Perkins                                                         [Page 9]
  507.  
  508. RFC 1134                          PPP                      November 1989
  509.  
  510.  
  511.       3. Link Maintenance packets used to manage and debug a link,
  512.          (e.g., Code-Reject, Protocol-Reject, Echo-Request, Echo-Reply
  513.          and Discard-Request)
  514.  
  515.    The finite-state automation is defined by events, state transitions
  516.    and actions.  Events include receipt of external commands such as
  517.    Open and Close, expiration of the Restart timer, and receipt of
  518.    packets from a LCP peer.  Actions include the starting of the Restart
  519.    timer and transmission of packets.
  520.  
  521. 4.1.2.  State Diagram
  522.  
  523.    The state diagram which follows describes the sequence of events for
  524.    reaching agreement on Configuration Options (opening the PPP
  525.    connection) and for later closing of the connection.  The state
  526.    machine is initially in the Closed state (1).  Once the Open state
  527.    (6) has been reached, both ends of the link have met the requirement
  528.    of having both sent and received a Configure-Ack packet.
  529.  
  530.    In the state diagram, events are shown above horizontal lines.
  531.    Actions are shown below horizontal lines.  Two types of LCP packets -
  532.    Configure-Naks and Configure-Rejects - are not differentiated in the
  533.    state diagram.  As will be described later, these packets do indeed
  534.    serve different, though similar, functions.  However, at the level of
  535.    detail of this state diagram, they always cause the same transition.
  536.  
  537.    Since a more detailed specification of the LCP automation is given in
  538.    a state transition table in the following section, implementation
  539.    should be done by consulting it rather than this state diagram.
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Perkins                                                        [Page 10]
  563.  
  564. RFC 1134                          PPP                      November 1989
  565.  
  566.  
  567.                                     +------------------------------+
  568.                                     |                              |
  569.                                     V                              |
  570.         +---2---+           PO +---1---+        RTA +---7---+      |
  571.         |       |<-------------|       |<-----------|       |      |
  572.         |Listen |              |Closed |            |Closing|      |
  573.     RCR |       | C            |       | PLD        |       |      |
  574.    +----|       |----->+------>|       |<---Any     |       |<--+  |
  575.    |scr +-------+      ^       +-------+    State   +-------+   |  |
  576.    |                   |     AO  |                    ^   | TO  |  |
  577.    |       +-----------+     --- |                    |   +---->+  |
  578.    |       |                 SCR |     C              |     str ^  |
  579.    |    C  |   RCN/TO            |   +----------------+         |  |
  580.    |    -- | +-------->+<--------+   | str                      |  |
  581.    |       | | scr     |             |                          |  |
  582.    |    +---3---+      V   TO  +---4---+            +-------+   |  |
  583.    |    |       |<-----+<------|       |<-----------|       |   |  |
  584.    |    | Req-  |          scr | Ack-  |        scn | Good  |   |  |
  585.    |    | Sent  | RCA          | Rcvd  | RCR        | Req?  |   |  |
  586.    |    |       |------------->|       |----------->|       |   |  |
  587.    |    +-------+              +-------+            +-------+   |  |
  588.    |       | ^                                         |        |  |
  589.    |   RCR | +<--------+                               |        |  |
  590.    |   --- | |         |     TO        RCN         --- |        |  |
  591.    |       | | ---     +---------+   +-----+       sca |        |  |
  592.    |       V | scn           scr |   | scr |           V        |  |
  593.    |    +-------+              +---5---+   |        +---6---+ C |  |
  594.    +--->|       |------------->|       |<--+        |       |---+  |
  595.         | Good  | sca          | Ack-  |            | Open  | str  |
  596.         | Req?  |          RCR | Sent  | RCA        |       |      |
  597.         |       |<-------------|       |----------->|       |      |
  598.         +-------+              +-------+            +-------+      |
  599.               ^                                       |   |        |
  600.               |                                   RCR |   | RTR    |
  601.               +---------------------------------------+   +--------+
  602.                                                   scr       sta
  603.  
  604.    Events                                  Actions
  605.    RCR - Receive-Configure-Request         scr - Send Configure-Request
  606.    RCA - Receive-Configure-Ack             sca - Send Configure-Ack
  607.    RCN - Receive-Configure-Nak or Reject   scn - Send Configure-Nak or
  608.    RTR - Receive-Terminate-Req                   Reject
  609.    RTA - Receive-Terminate-Ack             str - Send Terminate-Req
  610.    AO  - Active-Open                       sta - Sent Terminate-Ack
  611.    PO  - Passive-Open
  612.    C   - Close
  613.    TO  - Timeout
  614.    PLD - Physical-Layer-Down
  615.  
  616.  
  617.  
  618. Perkins                                                        [Page 11]
  619.  
  620. RFC 1134                          PPP                      November 1989
  621.  
  622.  
  623. 4.1.3.  State Transition Table
  624.  
  625.    The complete state transition table follows.  States are indicated
  626.    horizontally, and events are read vertically.  State transitions and
  627.    actions are represented in the form action/new-state.  Two actions
  628.    caused by the same event are represented as action1&action2.
  629.  
  630.          | State
  631.          |   1       2        3        4        5        6        7
  632.    Events| Closed  Listen  Req-Sent Ack-Rcvd Ack-Sent  Open    Closing
  633.    ------+-------------------------------------------------------------
  634.      AO  | scr/3   scr/3      3        4        5        6      scr/3
  635.      PO  |   2       2        2*       4        5        6      sta/3*
  636.      C   |   1       1        1*       1      str/7    str/7      7
  637.      TO  |   1       2      scr/3    scr/3    scr/3      6      str/7*
  638.     PLD  |   1       1        1        1        1        1        1
  639.     RCR+ | sta/1 scr&sca/5  sca/5    sca/6    sca/5  scr&sca/5    7
  640.     RCR- | sta/1 scr&scn/3  scn/3    scn/4    scn/3  scr&scn/3    7
  641.     RCA  | sta/1   sta/2      4      scr/3      6      scr/3      7
  642.     RCN  | sta/1   sta/2    scr/3    scr/3    scr/5    scr/3      7
  643.     RTR  | sta/1   sta/2    sta/3    sta/3    sta/3    sta/1    sta/7
  644.     RTA  |   1       2        3        3        3        1        1
  645.     RCJ  |   1       2        1        1        1        1        1
  646.     RUC  | scj/1   scj/1    scj/1    scj/1    scj/1    scj/1  1 scj/1
  647.     RER  | sta/1   sta/2      3        4        5      ser/1      7
  648.  
  649.    Notes:
  650.        RCR+ - Receive-Configure-Request (Good)
  651.        RCR- - Receive-Configure-Request (Bad)
  652.        RCJ  - Receive-Code-Reject
  653.        RUC  - Receive-Unknown-Code
  654.        RER  - Receive-Echo-Request
  655.        scj  - Send-Code-Reject
  656.        ser  - Send-Echo-Reply
  657.         *   - Special attention necessary, see detailed text
  658.  
  659. 4.1.4.  Events
  660.  
  661.    Transitions and actions in the LCP state machine are caused by
  662.    events.  Some events are caused by commands executed at the local end
  663.    (e.g., Active-Open, Passive-Open, and Close), others are caused by
  664.    the receipt of packets from the remote end (e.g., Receive- Configure-
  665.    Request, Receive-Configure-Ack, Receive-Configure-Nak, Receive-
  666.    Terminate-Request and Receive-Terminate-Ack), and still others are
  667.    caused by the expiration of the Restart timer started as the result
  668.    of other events (e.g., Timeout).
  669.  
  670.    Following is a list of LCP events.
  671.  
  672.  
  673.  
  674. Perkins                                                        [Page 12]
  675.  
  676. RFC 1134                          PPP                      November 1989
  677.  
  678.  
  679.    Active-Open (AO)
  680.  
  681.       The Active-Open event indicates the local execution of an Active-
  682.       Open command by the network administrator (human or program).
  683.       When this event occurs, LCP should immediately attempt to open the
  684.       connection by exchanging configuration packets with the LCP peer.
  685.  
  686.    Passive-Open (PO)
  687.  
  688.       The Passive-Open event is similar to the Active-Open event.
  689.       However, instead of immediately exchanging configuration packets,
  690.       LCP should wait for the peer to send the first packet.  This will
  691.       only happen after an Active-Open event in the LCP peer.
  692.  
  693.    Close (C)
  694.  
  695.       The Close event indicates the local execution of a Close command.
  696.       When this event occurs, LCP should immediately attempt to close
  697.       the connection.
  698.  
  699.    Timeout (TO)
  700.  
  701.       The Timeout event indicates the expiration of the LCP Restart
  702.       timer.  The LCP Restart timer is started as the result of other
  703.       LCP events.
  704.  
  705.       The Restart timer is used to time out transmissions of Configure-
  706.       Request and Terminate-Request packets.  Expiration of the Restart
  707.       timer causes a Timeout event, which triggers the corresponding
  708.       Configure-Request or Terminate-Request packet to be retransmitted.
  709.       The Restart timer MUST be configurable, but should default to
  710.       three (3) seconds.
  711.  
  712.    Receive-Configure-Request (RCR)
  713.  
  714.       The Receive-Configure-Request event occurs when a Configure-
  715.       Request packet is received from the LCP peer.  The Configure-
  716.       Request packet indicates the desire to open a LCP connection and
  717.       may specify Configuration Options.  The Configure-Request packet
  718.       is more fully described in a later section.
  719.  
  720.    Receive-Configure-Ack (RCA)
  721.  
  722.       The Receive-Configure-Ack event occurs when a valid Configure-Ack
  723.       packet is received from the LCP peer.  The Configure-Ack packet is
  724.       a positive response to a Configure-Request packet.
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Perkins                                                        [Page 13]
  731.  
  732. RFC 1134                          PPP                      November 1989
  733.  
  734.  
  735.    Receive-Configure-Nak (RCN)
  736.  
  737.       The Receive-Configure-Nak event occurs when a valid Configure-Nak
  738.       or Configure-Reject packet is received from the LCP peer.  The
  739.       Configure-Nak and Configure-Reject packets are negative responses
  740.       to a Configure-Request packet.
  741.  
  742.    Receive-Terminate-Request (RTR)
  743.  
  744.       The Receive-Terminate-Request event occurs when a Terminate-
  745.       Request packet is received from the LCP peer.  The Terminate-
  746.       Request packet indicates the desire to close the LCP connection.
  747.  
  748.    Receive-Terminate-Ack (RTA)
  749.  
  750.       The Receive-Terminate-Ack event occurs when a Terminate-Ack packet
  751.       is received from the LCP peer.  The Terminate-Ack packet is a
  752.       response to a Terminate-Request packet.
  753.  
  754.    Receive-Code-Reject (RCJ)
  755.  
  756.       The Receive-Code-Reject event occurs when a Code-Reject packet is
  757.       received from the LCP peer.  The Code-Reject packet communicates
  758.       an error that immediately closes the connection.
  759.  
  760.    Receive-Unknown-Code (RUC)
  761.  
  762.       The Receive-Unknown-Code event occurs when an un-interpretable
  763.       packet is received from the LCP peer.  The Code-Reject packet is a
  764.       response to an unknown packet.
  765.  
  766.    Receive-Echo-Request (RER)
  767.  
  768.       The Receive-Echo-Request event occurs when a Echo-Request, Echo-
  769.       Reply, or Discard-Request packet is received from the LCP peer.
  770.       The Echo-Reply packet is a response to a Echo-Request packet.
  771.       There is no reply to a Discard-Request.
  772.  
  773.    Physical-Layer-Down (PLD)
  774.  
  775.       The Physical-Layer-Down event occurs when the Physical Layer
  776.       indicates that it is down.
  777.  
  778. 4.1.5.  Actions
  779.  
  780.    Actions in the LCP state machine are caused by events and typically
  781.    indicate the transmission of packets and/or the starting or stopping
  782.    of the Restart timer.  Following is a list of LCP actions.
  783.  
  784.  
  785.  
  786. Perkins                                                        [Page 14]
  787.  
  788. RFC 1134                          PPP                      November 1989
  789.  
  790.  
  791.    Send-Configure-Request (scr)
  792.  
  793.       The Send-Configure-Request action transmits a Configure-Request
  794.       packet.  This indicates the desire to open a LCP connection with a
  795.       specified set of Configuration Options.  The Restart timer is
  796.       started after the Configure-Request packet is transmitted, to
  797.       guard against packet loss.
  798.  
  799.    Send-Configure-Ack (sca)
  800.  
  801.       The Send-Configure-Ack action transmits a Configure-Ack packet.
  802.       This acknowledges the receipt of a Configure-Request packet with
  803.       an acceptable set of Configuration Options.
  804.  
  805.    Send-Configure-Nak (scn)
  806.  
  807.       The Send-Configure-Nak action transmits a Configure-Nak or
  808.       Configure-Reject packet, as appropriate.  This negative response
  809.       reports the receipt of a Configure-Request packet with an
  810.       unacceptable set of Configuration Options.  Configure-Nak packets
  811.       are used to refuse a Configuration Option value, and to suggest a
  812.       new, acceptable value.  Configure-Reject packets are used to
  813.       refuse all negotiation about a Configuration Option, typically
  814.       because it is not recognized or implemented.  The use of
  815.       Configure-Nak vs. Configure-Reject is more fully described in the
  816.       section on LCP Packet Formats.
  817.  
  818.    Send-Terminate-Req (str)
  819.  
  820.       The Send-Terminate-Request action transmits a Terminate-Request
  821.       packet.  This indicates the desire to close a LCP connection.  The
  822.       Restart timer is started after the Terminate-Request packet is
  823.       transmitted, to guard against packet loss.
  824.  
  825.    Send-Terminate-Ack (sta)
  826.  
  827.       The Send-Terminate-Request action transmits a Terminate-Ack
  828.       packet.  This acknowledges the receipt of a Terminate-Request
  829.       packet or otherwise confirms the belief that a LCP connection is
  830.       Closed.
  831.  
  832.    Send-Code-Reject (scj)
  833.  
  834.       The Send-Code-Reject action transmits a Code-Reject packet.  This
  835.       indicates the receipt of an unknown type of packet.  This is an
  836.       unrecoverable error which causes immediate transitions to the
  837.       Closed state on both ends of the link.
  838.  
  839.  
  840.  
  841.  
  842. Perkins                                                        [Page 15]
  843.  
  844. RFC 1134                          PPP                      November 1989
  845.  
  846.  
  847.    Send-Echo-Reply (ser)
  848.  
  849.       The Send-Echo-Reply action transmits an Echo-Reply packet.  This
  850.       acknowledges the receipt of an Echo-Request packet.
  851.  
  852. 4.1.6.  States
  853.  
  854.    Following is a more detailed description of each LCP state.
  855.  
  856.    Closed (1)
  857.  
  858.       The initial and final state is the Closed state.  In the Closed
  859.       state the connection is down and there is no attempt to open it;
  860.       all connection requests from peers are rejected.  Physical-Layer-
  861.       Down events always cause an immediate transition to the Closed
  862.       state.
  863.  
  864.       There are two events which cause a transition out of the Closed
  865.       state, Active-Open and Passive-Open.  Upon an Active-Open event, a
  866.       Configure-Request is transmitted, the Restart timer is started,
  867.       and the Request-Sent state is entered.  Upon a Passive-Open event,
  868.       the Listen state is entered immediately.  Upon receipt of any
  869.       packet, with the exception of a Terminate-Ack, a Terminate-Ack is
  870.       sent.  Terminate-Acks are silently discarded to avoid creating a
  871.       loop.
  872.  
  873.       The Restart timer is not running in the Closed state.
  874.  
  875.       The Physical Layer connection may be disconnected at any time when
  876.       in the LCP Closed state.
  877.  
  878.    Listen (2)
  879.  
  880.       The Listen state is similar to the Closed state in that the
  881.       connection is down and there is no attempt to open it.  However,
  882.       peer connection requests are no longer rejected.
  883.  
  884.       Upon receipt of a Configure-Request, a Configure-Request is
  885.       immediately transmitted and the Restart timer is started.  The
  886.       received Configuration Options are examined and the proper
  887.       response is sent.  If a Configure-Ack is sent, the Ack-Sent state
  888.       is entered.  Otherwise, if a Configure-Nak or Configure-Reject is
  889.       sent, the Request-Sent state is entered.  In either case, LCP
  890.       exits its passive state, and begins to actively open the
  891.       connection.  Terminate-Ack packets are sent in response to either
  892.       Configure-Ack or Configure-Nak packets,
  893.  
  894.       The Restart timer is not running in the Listen state.
  895.  
  896.  
  897.  
  898. Perkins                                                        [Page 16]
  899.  
  900. RFC 1134                          PPP                      November 1989
  901.  
  902.  
  903.    Request-Sent (3)
  904.  
  905.       In the Request-Sent state an active attempt is made to open the
  906.       connection.  A Configure-Request has been sent and the Restart
  907.       timer is running, but a Configure-Ack has not yet been received
  908.       nor has one been sent.
  909.  
  910.       Upon receipt of a Configure-Ack, the Ack-Received state is
  911.       immediately entered.  Upon receipt of a Configure-Nak or
  912.       Configure-Reject, the Configure-Request Configuration Options are
  913.       adjusted appropriately, a new Configure-Request is transmitted,
  914.       and the Restart timer is restarted.  Similarly, upon the
  915.       expiration of the Restart timer, a new Configure-Request is
  916.       transmitted and the Restart timer is restarted.  Upon receipt of a
  917.       Configure-Request, the Configuration Options are examined and if
  918.       acceptable, a Configure-Ack is sent and the Ack-Sent state is
  919.       entered.  If the Configuration Options are unacceptable, a
  920.       Configure-Nak or Configure-Reject is sent as appropriate.
  921.  
  922.       Since there is an outstanding Configure-Request in the Request-
  923.       Sent state, special care must be taken to implement the Passive-
  924.       Open and Close events; otherwise, it is possible for the LCP peer
  925.       to think the connection is open.  Processing of either event
  926.       should be postponed until there is reasonable assurance that the
  927.       peer is not open.  In particular, the Restart timer should be
  928.       allowed to expire.
  929.  
  930.    Ack-Received (4)
  931.  
  932.       In the Ack-Received state, a Configure-Request has been sent and a
  933.       Configure-Ack has been received.  The Restart timer is still
  934.       running since a Configure-Ack has not yet been transmitted.
  935.  
  936.       Upon receipt of a Configure-Request with acceptable Configuration
  937.       Options, a Configure-Ack is transmitted, the Restart timer is
  938.       stopped and the Open state is entered.  If the Configuration
  939.       Options are unacceptable, a Configure-Nak or Configure-Reject is
  940.       sent as appropriate.  Upon the expiration of the Restart timer, a
  941.       new Configure-Request is transmitted, the Restart timer is
  942.       restarted, and the state machine returns to the Request-Sent
  943.       state.
  944.  
  945.    Ack-Sent (5)
  946.  
  947.       In the Ack-Sent state, a Configure-Ack and a Configure-Request
  948.       have been sent but a Configure-Ack has not yet been received.  The
  949.       Restart timer is always running in the Ack-Sent state.
  950.  
  951.  
  952.  
  953.  
  954. Perkins                                                        [Page 17]
  955.  
  956. RFC 1134                          PPP                      November 1989
  957.  
  958.  
  959.       Upon receipt of a Configure-Ack, the Restart timer is stopped and
  960.       the Open state is entered.  Upon receipt of a Configure-Nak or
  961.       Configure-Reject, the Configure-Request Configuration Options are
  962.       adjusted appropriately, a new Configure-Request is transmitted,
  963.       and the Restart timer is restarted.  Upon the expiration of the
  964.       Restart timer, a new Configure-Request is transmitted, the Restart
  965.       timer is restarted, and the state machine returns to the Request-
  966.       Sent state.
  967.  
  968.    Open (6)
  969.  
  970.       In the Open state, a connection exists and data may be
  971.       communicated over the link.  The Restart timer is not running in
  972.       the Open state.
  973.  
  974.       In normal operation, only two events cause transitions out of the
  975.       Open state.  Upon receipt of a Close command, a Terminate-Request
  976.       is transmitted, the Restart timer is started, and the Closing
  977.       state is entered.  Upon receipt of a Terminate-Request, a
  978.       Terminate-Ack is transmitted and the Closed state is entered.
  979.       Upon receipt of an Echo-Request, an Echo-Reply is transmitted.
  980.       Similarly, Echo-Reply and Discard-Request packets are silently
  981.       discarded or processed as expected.  All other events cause
  982.       immediate transitions out of the Open state and should be handled
  983.       as if the state machine were in the Listen state.
  984.  
  985.    Closing (7)
  986.  
  987.       In the Closing state, an active attempt is made to close the
  988.       connection.  A Terminate-Request has been sent and the Restart
  989.       timer is running, but a Terminate-Ack has not yet been received.
  990.  
  991.       Upon receipt of a Terminate-Ack, the Closed state is immediately
  992.       entered.  Upon the expiration of the Restart timer, a new
  993.       Terminate-Request is transmitted and the Restart timer is
  994.       restarted.  After the Restart timer has expired Max-Restart times,
  995.       this action may be skipped, and the Closed state may be entered.
  996.       Max-Restart MUST be a configurable parameter.
  997.  
  998.       Since there is an outstanding Terminate-Request in the Closing
  999.       state, special care must be taken to implement the Passive-Open
  1000.       event; otherwise, it is possible for the LCP peer to think the
  1001.       connection is open.  Processing of the Passive-Open event should
  1002.       be postponed until there is reasonable assurance that the peer is
  1003.       not open.  In particular, the implementation should wait until the
  1004.       state machine would normally transition to the Closed state
  1005.       because of a Receive-Terminate-Ack event or Max-Restart Timeout
  1006.       events.
  1007.  
  1008.  
  1009.  
  1010. Perkins                                                        [Page 18]
  1011.  
  1012. RFC 1134                          PPP                      November 1989
  1013.  
  1014.  
  1015. 4.2.  Loop Avoidance
  1016.  
  1017.    Note that the protocol makes a reasonable attempt at avoiding
  1018.    Configuration Option negotiation loops.  However, the protocol does
  1019.    NOT guarantee that loops will not happen.  As with any negotiation,
  1020.    it is possible to configure two PPP implementations with conflicting
  1021.    policies that will never converge.  It is also possible to configure
  1022.    policies which do converge, but which take significant time to do so.
  1023.    Implementors should keep this in mind and should implement loop
  1024.    detection mechanisms or higher level timeouts.  If a timeout is
  1025.    implemented, it MUST be configurable.
  1026.  
  1027.    For example, implementations could take care to avoid Configure-
  1028.    Request or Terminate-Request livelocks by using a Max-Retries
  1029.    counter.  A Configure-Request livelock could occur when an
  1030.    originating PPP sends and re-sends a C-R without receiving a reply
  1031.    (e.g., the receiving PPP entity may have died).  A Terminate-Request
  1032.    livelock could occur when the originating PPP sends and re-sends a
  1033.    T-R without receiving a Terminate-Ack (e.g., the T-A may have been
  1034.    lost, but the remote PPP may have already terminated).  Max-Retries
  1035.    indicates the number of packet retransmissions that are allowed
  1036.    before there is reasonable assurance that a livelock situation
  1037.    exists.  Max-Retries MUST also be configurable, but should default to
  1038.    ten (10) retransmissions.
  1039.  
  1040. 4.3  Packet Format
  1041.  
  1042.    Exactly one Link Control Protocol packet is encapsulated in the
  1043.    Information field of PPP Data Link Layer frames where the Protocol
  1044.    field indicates type hex c021 (Link Control Protocol).
  1045.  
  1046.    A summary of the Link Control Protocol packet format is shown below.
  1047.    The fields are transmitted from left to right.
  1048.  
  1049.        0                   1                   2                   3
  1050.        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1051.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1052.       |     Code      |  Identifier   |            Length             |
  1053.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1054.       |    Data ...
  1055.       +-+-+-+-+
  1056.  
  1057.    Code
  1058.  
  1059.       The Code field is one octet and identifies the kind of LCP packet.
  1060.       LCP Codes are assigned as follows:
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066. Perkins                                                        [Page 19]
  1067.  
  1068. RFC 1134                          PPP                      November 1989
  1069.  
  1070.  
  1071.          1       Configure-Request
  1072.          2       Configure-Ack
  1073.          3       Configure-Nak
  1074.          4       Configure-Reject
  1075.          5       Terminate-Request
  1076.          6       Terminate-Ack
  1077.          7       Code-Reject
  1078.          8       Protocol-Reject
  1079.          9       Echo-Request
  1080.          10      Echo-Reply
  1081.          11      Discard-Request
  1082.  
  1083.    Identifier
  1084.  
  1085.       The Identifier field is one octet and aids in matching requests
  1086.       and replies.
  1087.  
  1088.    Length
  1089.  
  1090.       The Length field is two octets and indicates the length of the LCP
  1091.       packet including the Code, Identifier, Length and Data fields.
  1092.       Octets outside the range of the Length field should be treated as
  1093.       Data Link Layer padding and should be ignored on reception.
  1094.  
  1095.    Data
  1096.  
  1097.       The Data field is zero or more octets as indicated by the Length
  1098.       field.  The format of the Data field is determined by the Code
  1099.       field.
  1100.  
  1101.    Regardless of which Configuration Options are enabled, all LCP
  1102.    packets are always sent in the full, standard form, as if no
  1103.    Configuration Options were enabled.  This ensures that LCP
  1104.    Configure-Request packets are always recognizable even when one end
  1105.    of the link mistakenly believes the link to be Open.
  1106.  
  1107.    This document describes Version 1 of the Link Control Protocol.  In
  1108.    the interest of simplicity, there is no version field in the LCP
  1109.    packet.  If a new version of LCP is necessary in the future, the
  1110.    intention is that a new Data Link Layer Protocol field value should
  1111.    be used to differentiate Version 1 LCP from all other versions.  A
  1112.    correctly functioning Version 1 LCP implementation will always
  1113.    respond to unknown Protocols (including other versions) with an
  1114.    easily recognizable Version 1 packet, thus providing a deterministic
  1115.    fallback mechanism for implementations of other versions.
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122. Perkins                                                        [Page 20]
  1123.  
  1124. RFC 1134                          PPP                      November 1989
  1125.  
  1126.  
  1127. 4.3.1.  Configure-Request
  1128.  
  1129.    Description
  1130.  
  1131.       A LCP implementation wishing to open a connection MUST transmit a
  1132.       LCP packet with the Code field set to 1 (Configure-Request) and
  1133.       the Options field filled with any desired changes to the default
  1134.       link Configuration Options.
  1135.  
  1136.       Upon reception of a Configure-Request, an appropriate reply MUST
  1137.       be transmitted.
  1138.  
  1139.    A summary of the Configure-Request packet format is shown below.  The
  1140.    fields are transmitted from left to right.
  1141.  
  1142.     0                   1                   2                   3
  1143.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1144.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1145.    |     Code      |  Identifier   |            Length             |
  1146.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1147.    | Options ...
  1148.    +-+-+-+-+
  1149.  
  1150.    Code
  1151.  
  1152.       1 for Configure-Request.
  1153.  
  1154.    Identifier
  1155.  
  1156.       The Identifier field should be changed on each transmission.  On
  1157.       reception, the Identifier field should be copied into the
  1158.       Identifier field of the appropriate reply packet.
  1159.  
  1160.    Options
  1161.  
  1162.       The options field is variable in length and contains the list of
  1163.       zero or more Configuration Options that the sender desires to
  1164.       negotiate.  All Configuration Options are always negotiated
  1165.       simultaneously.  The format of Configuration Options is further
  1166.       described in a later section.
  1167.  
  1168. 4.3.2.  Configure-Ack
  1169.  
  1170.    Description
  1171.  
  1172.       If every Configuration Option received in a Configure-Request is
  1173.       both recognizable and acceptable, then a LCP implementation should
  1174.       transmit a LCP packet with the Code field set to 2 (Configure-
  1175.  
  1176.  
  1177.  
  1178. Perkins                                                        [Page 21]
  1179.  
  1180. RFC 1134                          PPP                      November 1989
  1181.  
  1182.  
  1183.       Ack), the Identifier field copied from the received Configure-
  1184.       Request, and the Options field copied from the received
  1185.       Configure-Request.  The acknowledged Configuration Options MUST
  1186.       NOT be reordered or modified in any way.
  1187.  
  1188.       On reception of a Configure-Ack, the Identifier field must match
  1189.       that of the last transmitted Configure-Request, or the packet is
  1190.       invalid.  Additionally, the Configuration Options in a Configure-
  1191.       Ack must match those of the last transmitted Configure-Request, or
  1192.       the packet is invalid.  Invalid packets should be silently
  1193.       discarded.
  1194.  
  1195.       Reception of a valid Configure-Ack indicates that all
  1196.       Configuration Options sent in the last Configure-Request are
  1197.       acceptable.
  1198.  
  1199.    A summary of the Configure-Ack packet format is shown below.  The
  1200.    fields are transmitted from left to right.
  1201.  
  1202.     0                   1                   2                   3
  1203.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1204.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1205.    |     Code      |  Identifier   |            Length             |
  1206.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1207.    | Options ...
  1208.    +-+-+-+-+
  1209.  
  1210.    Code
  1211.  
  1212.       2 for Configure-Ack.
  1213.  
  1214.    Identifier
  1215.  
  1216.       The Identifier field is a copy of the Identifier field of the
  1217.       Configure-Request which caused this Configure-Ack.
  1218.  
  1219.    Options
  1220.  
  1221.       The Options field is variable in length and contains the list of
  1222.       zero or more Configuration Options that the sender is
  1223.       acknowledging.  All Configuration Options are always acknowledged
  1224.       simultaneously.
  1225.  
  1226. 4.3.3.  Configure-Nak
  1227.  
  1228.    Description
  1229.  
  1230.       If every element of the received Configuration Options is
  1231.  
  1232.  
  1233.  
  1234. Perkins                                                        [Page 22]
  1235.  
  1236. RFC 1134                          PPP                      November 1989
  1237.  
  1238.  
  1239.       recognizable but some are not acceptable, then a LCP
  1240.       implementation should transmit a LCP packet with the Code field
  1241.       set to 3 (Configure-Nak), the Identifier field copied from the
  1242.       received Configure-Request, and the Options field filled with only
  1243.       the unacceptable Configuration Options from the Configure-Request.
  1244.       All acceptable Configuration Options should be filtered out of the
  1245.       Configure-Nak, but otherwise the Configuration Options from the
  1246.       Configure-Request MUST NOT be reordered.  Each of the nak'd
  1247.       Configuration Options MUST be modified to a value acceptable to
  1248.       the Configure-Nak sender.  Finally, an implementation may be
  1249.       configured to require the negotiation of a specific option.  If
  1250.       that option is not listed, then that option may be appended to the
  1251.       list of nak'd Configuration Options in order to request the remote
  1252.       end to list that option in its next Configure-Request packet.  The
  1253.       appended option must include a value acceptable to the Configure-
  1254.       Nak sender.
  1255.  
  1256.       On reception of a Configure-Nak, the Identifier field must match
  1257.       that of the last transmitted Configure-Request, or the packet is
  1258.       invalid and should be silently discarded.
  1259.  
  1260.       Reception of a valid Configure-Nak indicates that a new
  1261.       Configure-Request should be sent with the Configuration Options
  1262.       modified as specified in the Configure-Nak.
  1263.  
  1264.    A summary of the Configure-Nak packet format is shown below.  The
  1265.    fields are transmitted from left to right.
  1266.  
  1267.     0                   1                   2                   3
  1268.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1269.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1270.    |     Code      |  Identifier   |            Length             |
  1271.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1272.    | Options ...
  1273.    +-+-+-+-+
  1274.  
  1275.    Code
  1276.  
  1277.       3 for Configure-Nak.
  1278.  
  1279.    Identifier
  1280.  
  1281.       The Identifier field is a copy of the Identifier field of the
  1282.       Configure-Request which caused this Configure-Nak.
  1283.  
  1284.    Options
  1285.  
  1286.       The Options field is variable in length and contains the list of
  1287.  
  1288.  
  1289.  
  1290. Perkins                                                        [Page 23]
  1291.  
  1292. RFC 1134                          PPP                      November 1989
  1293.  
  1294.  
  1295.       zero or more Configuration Options that the sender is nak'ing.
  1296.       All Configuration Options are always nak'd simultaneously.
  1297.  
  1298. 4.3.4.  Configure-Reject
  1299.  
  1300.    Description
  1301.  
  1302.       If some Configuration Options received in a Configure-Request are
  1303.       not recognizable or are not acceptable for negotiation (as
  1304.       configured by a network manager), then a LCP implementation should
  1305.       transmit a LCP packet with the Code field set to 4 (Configure-
  1306.       Reject), the Identifier field copied from the received Configure-
  1307.       Request, and the Options field filled with only the unrecognized
  1308.       Configuration Options from the Configure-Request.  All
  1309.       recognizable and negotiable Configuration Options must be filtered
  1310.       out of the Configure-Reject, but otherwise the Configuration
  1311.       Options MUST not be reordered.
  1312.  
  1313.       On reception of a Configure-Reject, the Identifier field must
  1314.       match that of the last transmitted Configure-Request, or the
  1315.       packet is invalid.  Additionally, the Configuration Options in a
  1316.       Configure-Reject must be a proper subset of those in the last
  1317.       transmitted Configure-Request, or the packet is invalid.  Invalid
  1318.       packets should be silently discarded.
  1319.  
  1320.       Reception of a Configure-Reject indicates that a new Configure-
  1321.       Request should be sent which does not include any of the
  1322.       Configuration Options listed in the Configure-Reject.
  1323.  
  1324.    A summary of the Configure-Reject packet format is shown below.  The
  1325.    fields are transmitted from left to right.
  1326.  
  1327.     0                   1                   2                   3
  1328.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1329.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1330.    |     Code      |  Identifier   |            Length             |
  1331.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1332.    | Options ...
  1333.    +-+-+-+-+
  1334.  
  1335.    Code
  1336.  
  1337.       4 for Configure-Reject.
  1338.  
  1339.    Identifier
  1340.  
  1341.       The Identifier field is a copy of the Identifier field of the
  1342.       Configure-Request which caused this Configure-Reject.
  1343.  
  1344.  
  1345.  
  1346. Perkins                                                        [Page 24]
  1347.  
  1348. RFC 1134                          PPP                      November 1989
  1349.  
  1350.  
  1351.    Options
  1352.  
  1353.       The Options field is variable in length and contains the list of
  1354.       zero or more Configuration Options that the sender is rejecting.
  1355.       All Configuration Options are always rejected simultaneously.
  1356.  
  1357. 4.3.5.  Terminate-Request and Terminate-Ack
  1358.  
  1359.    Description
  1360.  
  1361.       LCP includes Terminate-Request and Terminate-Ack Codes in order to
  1362.       provide a mechanism for closing a connection.
  1363.  
  1364.       A LCP implementation wishing to close a connection should transmit
  1365.       a LCP packet with the Code field set to 5 (Terminate-Request) and
  1366.       the Data field filled with any desired data.  Terminate-Request
  1367.       packets should continue to be sent until Terminate-Ack is
  1368.       received, the Physical Layer indicates that it has gone down, or a
  1369.       sufficiently large number have been transmitted such that the
  1370.       remote end is down with reasonable certainty.
  1371.  
  1372.       Upon reception of a Terminate-Request, a LCP packet MUST be
  1373.       transmitted with the Code field set to 6 (Terminate-Ack), the
  1374.       Identifier field copied from the Terminate-Request packet, and the
  1375.       Data field filled with any desired data.
  1376.  
  1377.       Reception of an unelicited Terminate-Ack indicates that the
  1378.       connection has been closed.
  1379.  
  1380.    A summary of the Terminate-Request and Terminate-Ack packet formats
  1381.    is shown below.  The fields are transmitted from left to right.
  1382.  
  1383.     0                   1                   2                   3
  1384.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1385.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1386.    |     Code      |  Identifier   |            Length             |
  1387.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1388.    |    Data ...
  1389.    +-+-+-+-+
  1390.  
  1391.    Code
  1392.  
  1393.       5 for Terminate-Request;
  1394.  
  1395.       6 for Terminate-Ack.
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Perkins                                                        [Page 25]
  1403.  
  1404. RFC 1134                          PPP                      November 1989
  1405.  
  1406.  
  1407.    Identifier
  1408.  
  1409.       The Identifier field is one octet and aids in matching requests
  1410.       and replies.
  1411.  
  1412.    Data
  1413.  
  1414.       The Data field is zero or more octets and contains uninterpreted
  1415.       data for use by the sender.  The data may consist of any binary
  1416.       value and may be of any length from zero to the established value
  1417.       for the peer's MRU.
  1418.  
  1419. 4.3.6.  Code-Reject
  1420.  
  1421.    Description
  1422.  
  1423.       Reception of a LCP packet with an unknown Code indicates that one
  1424.       of the communicating LCP implementations is faulty or incomplete.
  1425.       This error MUST be reported back to the sender of the unknown Code
  1426.       by transmitting a LCP packet with the Code field set to 7 (Code-
  1427.       Reject), and the inducing packet copied to the Rejected-Packet
  1428.       field.
  1429.  
  1430.       Upon reception of a Code-Reject, a LCP implementation should make
  1431.       an immediate transition to the Closed state, and should report the
  1432.       error, since it is unlikely that the situation can be rectified
  1433.       automatically.
  1434.  
  1435.    A summary of the Code-Reject packet format is shown below.  The
  1436.    fields are transmitted from left to right.
  1437.  
  1438.     0                   1                   2                   3
  1439.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1440.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1441.    |     Code      |  Identifier   |            Length             |
  1442.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1443.    | Rejected-Packet ...
  1444.    +-+-+-+-+-+-+-+-+
  1445.  
  1446.    Code
  1447.  
  1448.       7 for Code-Reject.
  1449.  
  1450.    Identifier
  1451.  
  1452.       The Identifier field is one octet and is for use by the
  1453.       transmitter.
  1454.  
  1455.  
  1456.  
  1457.  
  1458. Perkins                                                        [Page 26]
  1459.  
  1460. RFC 1134                          PPP                      November 1989
  1461.  
  1462.  
  1463.    Rejected-Packet
  1464.  
  1465.       The Rejected-Packet field contains a copy of the LCP packet which
  1466.       is being rejected.  It begins with the rejected Code field; it
  1467.       does not include any PPP Data Link Layer headers.  The Rejected-
  1468.       Packet should be truncated to comply with the established value of
  1469.       the peer's MRU.
  1470.  
  1471. 4.3.7.  Protocol-Reject
  1472.  
  1473.    Description
  1474.  
  1475.       Reception of a PPP frame with an unknown Data Link Layer Protocol
  1476.       indicates that the remote end is attempting to use a protocol
  1477.       which is unsupported at the local end.  This typically occurs when
  1478.       the remote end attempts to configure a new, but unsupported
  1479.       protocol.  If the LCP state machine is in the Open state, then
  1480.       this error MUST be reported back to the sender of the unknown
  1481.       protocol by transmitting a LCP packet with the Code field set to 8
  1482.       (Protocol-Reject), the Rejected-Protocol field set to the received
  1483.       Protocol, and the Data field filled with any desired data.
  1484.  
  1485.       Upon reception of a Protocol-Reject, a LCP implementation should
  1486.       stop transmitting frames of the indicated protocol.
  1487.  
  1488.       Protocol-Reject packets may only be sent in the LCP Open state.
  1489.       Protocol-Reject packets received in any state other than the LCP
  1490.       Open state should be discarded and no further action should be
  1491.       taken.
  1492.  
  1493.    A summary of the Protocol-Reject packet format is shown below.  The
  1494.    fields are transmitted from left to right.
  1495.  
  1496.     0                   1                   2                   3
  1497.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1498.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1499.    |     Code      |  Identifier   |            Length             |
  1500.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1501.    |       Rejected-Protocol       |      Rejected-Information ...
  1502.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1503.  
  1504.    Code
  1505.  
  1506.       8 for Protocol-Reject.
  1507.  
  1508.    Identifier
  1509.  
  1510.       The Identifier field is one octet and is for use by the
  1511.  
  1512.  
  1513.  
  1514. Perkins                                                        [Page 27]
  1515.  
  1516. RFC 1134                          PPP                      November 1989
  1517.  
  1518.  
  1519.       transmitter.
  1520.  
  1521.    Rejected-Protocol
  1522.  
  1523.       The Rejected-Protocol field is two octets and contains the
  1524.       Protocol of the Data Link Layer frame which is being rejected.
  1525.  
  1526.    Rejected-Information
  1527.  
  1528.       The Rejected-Information field contains a copy from the frame
  1529.       which is being rejected.  It begins with the Information field,
  1530.       and does not include any PPP Data Link Layer headers or the FCS.
  1531.       The Rejected-Information field should be truncated to comply with
  1532.       the established value of the peer's MRU.
  1533.  
  1534. 4.3.8.  Echo-Request and Echo-Reply
  1535.  
  1536.    Description
  1537.  
  1538.       LCP includes Echo-Request and Echo-Reply Codes in order to provide
  1539.       a Data Link Layer loopback mechanism for use in exercising both
  1540.       directions of the link.  This is useful as an aid in debugging,
  1541.       link quality determination, performance testing, and for numerous
  1542.       other functions.
  1543.  
  1544.       An Echo-Request sender transmits a LCP packet with the Code field
  1545.       set to 9 (Echo-Request) and the Data field filled with any desired
  1546.       data, up to but not exceeding the receivers established MRU.
  1547.  
  1548.       Upon reception of an Echo-Request, a LCP packet MUST be
  1549.       transmitted with the Code field set to 10 (Echo-Reply), the
  1550.       Identifier field copied from the received Echo-Request, and the
  1551.       Data field copied from the Echo-Request, truncating as necessary
  1552.       to avoid exceeding the peer's established MRU.
  1553.  
  1554.       Echo-Request and Echo-Reply packets may only be sent in the LCP
  1555.       Open state.  Echo-Request and Echo-Reply packets received in any
  1556.       state other than the LCP Open state should be discarded and no
  1557.       further action should be taken.
  1558.  
  1559.    A summary of the Echo-Request and Echo-Reply packet formats is shown
  1560.    below.  The fields are transmitted from left to right.
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570. Perkins                                                        [Page 28]
  1571.  
  1572. RFC 1134                          PPP                      November 1989
  1573.  
  1574.  
  1575.     0                   1                   2                   3
  1576.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1577.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1578.    |     Code      |  Identifier   |            Length             |
  1579.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1580.    |                         Magic-Number                          |
  1581.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1582.    |    Data ...
  1583.    +-+-+-+-+
  1584.  
  1585.    Code
  1586.  
  1587.       9 for Echo-Request;
  1588.  
  1589.       10 for Echo-Reply.
  1590.  
  1591.    Identifier
  1592.  
  1593.       The Identifier field is one octet and aids in matching Echo-
  1594.       Requests and Echo-Replies.
  1595.  
  1596.    Magic-Number
  1597.  
  1598.       The Magic-Number field is four octets and aids in detecting
  1599.       loopbacked links.  Unless modified by a Configuration Option, the
  1600.       Magic-Number MUST always be transmitted as zero and MUST always be
  1601.       ignored on reception.  Further use of the Magic-Number is beyond
  1602.       the scope of this discussion.
  1603.  
  1604.    Data
  1605.  
  1606.       The Data field is zero or more octets and contains uninterpreted
  1607.       data for use by the sender.  The data may consist of any binary
  1608.       value and may be of any length from zero to the established value
  1609.       for the peer's MRU.
  1610.  
  1611. 4.3.9.  Discard-Request
  1612.  
  1613.    Description
  1614.  
  1615.       LCP includes a Discard-Request Code in order to provide a Data
  1616.       Link Layer data sink mechanism for use in exercising the local to
  1617.       remote direction of the link.  This is useful as an aid in
  1618.       debugging, performance testing, and and for numerous other
  1619.       functions.
  1620.  
  1621.       A discard sender transmits a LCP packet with the Code field set to
  1622.       11 (Discard-Request) and the Data field filled with any desired
  1623.  
  1624.  
  1625.  
  1626. Perkins                                                        [Page 29]
  1627.  
  1628. RFC 1134                          PPP                      November 1989
  1629.  
  1630.  
  1631.       data, up to but not exceeding the receivers established MRU.
  1632.  
  1633.       A discard receiver MUST simply throw away an Discard-Request that
  1634.       it receives.
  1635.  
  1636.       Discard-Request packets may only be sent in the LCP Open state.
  1637.  
  1638.    A summary of the Discard-Request packet formats is shown below.  The
  1639.    fields are transmitted from left to right.
  1640.  
  1641.     0                   1                   2                   3
  1642.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  1643.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1644.    |     Code      |  Identifier   |            Length             |
  1645.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1646.    |                         Magic-Number                          |
  1647.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1648.    |    Data ...
  1649.    +-+-+-+-+
  1650.  
  1651.    Code
  1652.  
  1653.       11 for Discard-Request.
  1654.  
  1655.    Identifier
  1656.  
  1657.       The Identifier field is one octet and is for use by the Discard-
  1658.       Request transmitter.
  1659.  
  1660.    Magic-Number
  1661.  
  1662.       The Magic-Number field is four octets and aids in detecting
  1663.       loopbacked links.  Unless modified by a configuration option, the
  1664.       Magic-Number MUST always be transmitted as zero and MUST always be
  1665.       ignored on reception.  Further use of the Magic-Number is beyond
  1666.       the scope of this discussion.
  1667.  
  1668.    Data
  1669.  
  1670.       The Data field is zero or more octets and contains uninterpreted
  1671.       data for use by the sender.  The data may consist of any binary
  1672.       value and may be of any length from zero to the established value
  1673.       for the peer's MRU.
  1674.  
  1675. 4.4.  Configuration Options
  1676.  
  1677.    LCP Configuration Options allow modifications to the standard
  1678.    characteristics of a point-to-point link to be negotiated.
  1679.  
  1680.  
  1681.  
  1682. Perkins                                                        [Page 30]
  1683.  
  1684. RFC 1134                          PPP                      November 1989
  1685.  
  1686.  
  1687.    Negotiable modifications include such things as the maximum receive
  1688.    unit, async control character mapping, the link authentication
  1689.    method, the link encryption method, etc..  The Configuration Options
  1690.    themselves are described in separate documents.  If a Configuration
  1691.    Option is not included in a Configure-Request packet, the default
  1692.    value for that Configuration Option is assumed.
  1693.  
  1694.    The end of the list of Configuration Options is indicated by the end
  1695.    of the LCP packet.
  1696.  
  1697.    Unless otherwise specified, a specific Configuration Options should
  1698.    be listed no more than once in a Configuration Options list.
  1699.    Specific Configuration Options may override this general rule and may
  1700.    be listed more than once.  The effect of this is Configuration Option
  1701.    specific and is specified by each such Configuration Option.
  1702.  
  1703.    Also unless otherwise specified, all Configuration Options apply in a
  1704.    half-duplex fashion.  When negotiated, they apply to only one
  1705.    direction of the link, typically in the receive direction when
  1706.    interpreted from the point of view of the Configure-Request sender.
  1707.  
  1708. 4.4.1.  Format
  1709.  
  1710.    A summary of the Configuration Option format is shown below.  The
  1711.    fields are transmitted from left to right.
  1712.  
  1713.     0                   1
  1714.     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
  1715.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1716.    |     Type      |    Length     |    Data ...
  1717.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1718.  
  1719.    Type
  1720.  
  1721.       The Type field is one octet and indicates the type of
  1722.       Configuration Option.  The most up-to-date values of the Type
  1723.       field are specified in the most recent "Assigned Numbers" RFC
  1724.       [11].
  1725.  
  1726.    Length
  1727.  
  1728.       The Length field is one octet and indicates the length of this
  1729.       Configuration Option including the Type, Length and Data fields.
  1730.       If a negotiable Configuration Option is received in a Configure-
  1731.       Request but with an invalid Length, a Configure-Nak should be
  1732.       transmitted which includes the desired Configuration Option with
  1733.       an appropriate Length and Data.
  1734.  
  1735.  
  1736.  
  1737.  
  1738. Perkins                                                        [Page 31]
  1739.  
  1740. RFC 1134                          PPP                      November 1989
  1741.  
  1742.  
  1743.    Data
  1744.  
  1745.       The Data field is zero or more octets and indicates the value or
  1746.       other information for this Configuration Option.  The format and
  1747.       length of the Data field is determined by the Type and Length
  1748.       fields.
  1749.  
  1750. 5.  A PPP Network Control Protocol (NCP) for IP
  1751.  
  1752.    The IP Control Protocol (IPCP) is responsible for configuring,
  1753.    enabling, and disabling the IP protocol modules on both ends of the
  1754.    point-to-point link.  As with the Link Control Protocol, this is
  1755.    accomplished through an exchange of packets.  IPCP packets may not be
  1756.    exchanged until LCP has reached the network-layer Protocol
  1757.    Configuration Negotiation phase.  Likewise, IP datagrams may not be
  1758.    exchanged until IPCP has first opened the connection.
  1759.  
  1760.    The IP Control Protocol is exactly the same as the Link Control
  1761.    Protocol with the following exceptions:
  1762.  
  1763.    Data Link Layer Protocol Field
  1764.  
  1765.       Exactly one IP Control Protocol packet is encapsulated in the
  1766.       Information field of PPP Data Link Layer frames where the Protocol
  1767.       field indicates type hex 8021 (IP Control Protocol).
  1768.  
  1769.    Code field
  1770.  
  1771.       Only Codes 1 through 7 (Configure-Request, Configure-Ack,
  1772.       Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack
  1773.       and Code-Reject) are used.  Other Codes should be treated as
  1774.       unrecognized and should result in Code-Rejects.
  1775.  
  1776.    Timeouts
  1777.  
  1778.       IPCP packets may not be exchanged until the Link Control Protocol
  1779.       has reached the network-layer Protocol Configuration Negotiation
  1780.       phase.  An implementation should be prepared to wait for Link
  1781.       Quality testing to finish before timing out waiting for a
  1782.       Configure-Ack or other response.  It is suggested that an
  1783.       implementation give up only after user intervention or a
  1784.       configurable amount of time.
  1785.  
  1786.    Configuration Option Types
  1787.  
  1788.       The IPCP has a separate set of Configuration Options.  The most
  1789.       up-to-date values of the type field are specified in the most
  1790.       recent "Assigned Numbers" RFC [11].
  1791.  
  1792.  
  1793.  
  1794. Perkins                                                        [Page 32]
  1795.  
  1796. RFC 1134                          PPP                      November 1989
  1797.  
  1798.  
  1799. 5.1.  Sending IP Datagrams
  1800.  
  1801.    Before any IP packets may be communicated, both the Link Control
  1802.    Protocol and the IP Control Protocol must reach the Open state.
  1803.  
  1804.    Exactly one IP packet is encapsulated in the Information field of PPP
  1805.    Data Link Layer frames where the Protocol field indicates type hex
  1806.    0021 (Internet Protocol).
  1807.  
  1808.    The maximum length of an IP packet transmitted over a PPP link is the
  1809.    same as the maximum length of the Information field of a PPP data
  1810.    link layer frame.  Larger IP datagrams must be fragmented as
  1811.    necessary.  If a system wishes to avoid fragmentation and reassembly,
  1812.    it should use the TCP Maximum Segment Size option [12], or a similar
  1813.    mechanism, to discourage others from sending large datagrams.
  1814.  
  1815. A.  Asynchronous HDLC
  1816.  
  1817.    This appendix summarizes the modifications to ISO 3309-1979 proposed
  1818.    in ISO 3309:1984/PDAD1.  These modifications allow HDLC to be used
  1819.    with 8-bit asynchronous links.
  1820.  
  1821.    Transmission Considerations
  1822.  
  1823.       Each octet is delimited by a start and a stop element.
  1824.  
  1825.    Flag Sequence
  1826.  
  1827.       The Flag Sequence is a single octet and indicates the beginning or
  1828.       end of a frame.  The Flag Sequence consists of the binary sequence
  1829.       01111110 (hexadecimal 0x7e).
  1830.  
  1831.    Transparency
  1832.  
  1833.       On asynchronous links, a character stuffing procedure is used.
  1834.       The Control Escape octet is defined as binary 01111101
  1835.       (hexadecimal 0x7d) where the bit positions are numbered 87654321
  1836.       (not 76543210, BEWARE).
  1837.  
  1838.       After FCS computation, the transmitter examines the entire frame
  1839.       between the two Flag Sequences.  Each Flag Sequence, Control
  1840.       Escape octet and octet with value less than hexadecimal 0x20 is
  1841.       replaced by a two character sequence consisting of the Control
  1842.       Escape octet and the original octet with bit 6 complemented (i.e.,
  1843.       exclusive-or'd with hexadecimal 0x20).
  1844.  
  1845.       Prior to FCS computation, the receiver examines the entire frame
  1846.       between the two Flag Sequences.  For each Control Escape octet,
  1847.  
  1848.  
  1849.  
  1850. Perkins                                                        [Page 33]
  1851.  
  1852. RFC 1134                          PPP                      November 1989
  1853.  
  1854.  
  1855.       that octet is removed and bit 6 of the following octet is
  1856.       complemented.  A Control Escape octet immediately preceding the
  1857.       closing Flag Sequence indicates an invalid frame.
  1858.  
  1859.          Note: The inclusion of all octets less than hexadecimal 0x20
  1860.          allows all ASCII control characters [10] excluding DEL (Delete)
  1861.          to be transparently communicated through almost all known data
  1862.          communications equipment.
  1863.  
  1864.       A few examples may make this more clear.  Packet data is
  1865.       transmitted on the link as follows:
  1866.  
  1867.          0x7e is encoded as 0x7d, 0x5e.
  1868.          0x7d is encoded as 0x7d, 0x5d.
  1869.          0x01 is encoded as 0x7d, 0x21.
  1870.  
  1871.    Aborting a Transmission
  1872.  
  1873.       On asynchronous links, frames may be aborted by transmitting a "0"
  1874.       stop bit where a "1" bit is expected (framing error) or by
  1875.       transmitting a Control Escape octet followed immediately by a
  1876.       closing Flag Sequence.
  1877.  
  1878.    Inter-frame Time Fill
  1879.  
  1880.       On asynchronous links, inter-octet and inter-frame time fill
  1881.       should be accomplished by transmitting continuous "1" bits (mark-
  1882.       hold state).
  1883.  
  1884.          Note: On asynchronous links, inter-frame time fill can be
  1885.          viewed as extended inter-octet time fill.  Doing so can save
  1886.          one octet for every frame, decreasing delay and increasing
  1887.          bandwidth.  This is possible since a Flag Sequence may serve as
  1888.          both a frame close and a frame begin.  After having received
  1889.          any frame, an idle receiver will always be in a frame begin
  1890.          state.
  1891.  
  1892.          Robust transmitters should avoid using this trick over-
  1893.          zealously since the price for decreased delay is decreased
  1894.          reliability.  Noisy links may cause the receiver to receive
  1895.          garbage characters and interpret them as part of an incoming
  1896.          frame.  If the transmitter does not transmit a new opening Flag
  1897.          Sequence before sending the next frame, then that frame will be
  1898.          appended to the noise characters causing an invalid frame (with
  1899.          high reliability).  Transmitters should avoid this by
  1900.          transmitting an open Flag Sequence whenever "appreciable time"
  1901.          has elapsed since the prior closing Flag Sequence.  It is
  1902.          suggested that implementations will achieve the best results by
  1903.  
  1904.  
  1905.  
  1906. Perkins                                                        [Page 34]
  1907.  
  1908. RFC 1134                          PPP                      November 1989
  1909.  
  1910.  
  1911.          always sending an opening Flag Sequence if the new frame is not
  1912.          back-to-back with the last.  The maximum value for "appreciable
  1913.          time" is likely to be no greater than the typing rate of a slow
  1914.          to average typist, say 1 second.
  1915.  
  1916. B.  Fast Frame Check Sequence (FCS) Implementation
  1917.  
  1918. B.1.  FCS Computation Method
  1919.  
  1920.    The following code provides a table lookup computation for
  1921.    calculating the Frame Check Sequence as data arrives at the
  1922.    interface.  The table is created by the code in section 2.
  1923.  
  1924.    /*
  1925.     * FCS lookup table as calculated by the table generator in section 2.
  1926.     */
  1927.    static unsigned short fcstab[256] = {
  1928.         0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
  1929.         0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
  1930.         0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
  1931.         0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
  1932.         0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
  1933.         0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
  1934.         0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
  1935.         0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
  1936.         0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
  1937.         0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
  1938.         0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
  1939.         0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
  1940.         0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
  1941.         0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
  1942.         0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
  1943.         0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
  1944.         0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
  1945.         0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
  1946.         0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
  1947.         0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
  1948.         0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
  1949.         0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
  1950.         0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
  1951.         0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
  1952.         0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
  1953.         0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
  1954.         0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
  1955.         0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
  1956.         0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
  1957.         0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
  1958.         0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
  1959.  
  1960.  
  1961.  
  1962. Perkins                                                        [Page 35]
  1963.  
  1964. RFC 1134                          PPP                      November 1989
  1965.  
  1966.  
  1967.         0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
  1968.    };
  1969.  
  1970.    #define PPPINITFCS      0xffff  /* Initial FCS value */
  1971.    #define PPPGOODFCS      0xf0b8  /* Good final FCS value */
  1972.  
  1973.  
  1974.    /*
  1975.     * Calculate a new fcs given the current fcs and the new data.
  1976.     */
  1977.    unsigned short pppfcs(fcs, cp, len)
  1978.        register unsigned short fcs;
  1979.        register unsigned char *cp;
  1980.        register int len;
  1981.    {
  1982.        while (len--)
  1983.            fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
  1984.  
  1985.        return (fcs);
  1986.    }
  1987.  
  1988. B.2.  Fast FCS table generator
  1989.  
  1990.    The following code creates the lookup table used to calculate the
  1991.    FCS.
  1992.  
  1993.    /*
  1994.     * Generate a FCS table for the HDLC FCS.
  1995.     *
  1996.     * Drew D. Perkins at Carnegie Mellon University.
  1997.     *
  1998.     * Code liberally borrowed from Mohsen Banan and D. Hugh Redelmeier.
  1999.     */
  2000.  
  2001.    /*
  2002.     * The HDLC polynomial: x**0 + x**5 + x**12 + x**16 (0x8408).
  2003.     */
  2004.    #define P       0x8408
  2005.  
  2006.  
  2007.    main()
  2008.    {
  2009.        register unsigned int b, v;
  2010.        register int i;
  2011.  
  2012.        printf("static unsigned short fcstab[256] = {");
  2013.        for (b = 0; ; ) {
  2014.            if (b % 8 == 0)
  2015.  
  2016.  
  2017.  
  2018. Perkins                                                        [Page 36]
  2019.  
  2020. RFC 1134                          PPP                      November 1989
  2021.  
  2022.  
  2023.                printf("0);
  2024.  
  2025.            v = b;
  2026.            for (i = 8; i--; )
  2027.                v = v & 1 ? (v >> 1) ^ P : v >> 1;
  2028.  
  2029.            printf("0x%04x", v & 0xFFFF);
  2030.  
  2031.            if (++b == 256)
  2032.                break;
  2033.            printf(",");
  2034.        }
  2035.       printf("0;0);
  2036.    }
  2037.  
  2038.  
  2039. References
  2040.  
  2041.   [1]  Electronic Industries Association, "Interface Between Data
  2042.        Terminal Equipment and Data Communications Equipment Employing
  2043.        Serial Binary Data Interchange", EIA Standard RS-232-C, August
  2044.        1969.
  2045.  
  2046.   [2]  International Organization For Standardization, "Data
  2047.        Communication - High-level Data Link Control Procedures - Frame
  2048.        Structure", ISO Standard 3309-1979, 1979.
  2049.  
  2050.   [3]  International Organization For Standardization, "Data
  2051.        Communication - High-level Data Link Control Procedures -
  2052.        Elements of Procedures", ISO Standard 4335-1979, 1979.
  2053.  
  2054.   [4]  International Organization For Standardization, "Data
  2055.        Communication - High-Level Data Link Control Procedures -
  2056.        Elements of Procedures - Addendum 1", ISO Standard 4335-
  2057.        1979/Addendum 1, 1979.
  2058.  
  2059.   [5]  International Organization For Standardization, "Information
  2060.        Processing Systems - Data Communication - High-level Data Link
  2061.        Control Procedures - Frame structure - Addendum 1: Start/stop
  2062.        Transmission", Proposed Draft International Standard ISO
  2063.        3309:1983/PDAD1, 1984.
  2064.  
  2065.   [6]  International Telecommunication Union, CCITT Recommendation X.25,
  2066.        "Interface Between Data Terminal Equipment (DTE) and Data Circuit
  2067.        Terminating Equipment (DCE) for Terminals Operating in the Packet
  2068.        Mode on Public Data Networks", CCITT Red Book, Volume VIII,
  2069.        Fascicle VIII.3, Rec. X.25., October 1984.
  2070.  
  2071.  
  2072.  
  2073.  
  2074. Perkins                                                        [Page 37]
  2075.  
  2076. RFC 1134                          PPP                      November 1989
  2077.  
  2078.  
  2079.   [7]  Perez, "Byte-wise CRC Calculations", IEEE Micro, June 1983.
  2080.        Morse, G., "Calculating CRC's by Bits and Bytes", Byte, September
  2081.        1986.
  2082.  
  2083.   [8]  LeVan, J., "A Fast CRC", Byte, November 1987.
  2084.  
  2085.   [9]  American National Standards Institute, "American National
  2086.        Standard Code for Information Interchange", ANSI X3.4-1977, 1977.
  2087.  
  2088.  [10]  Postel, J., "Internet Protocol", RFC 791, USC/Information
  2089.        Sciences Institute, September 1981.
  2090.  
  2091.  [11]  Reynolds, J.K., and J. Postel, "Assigned Numbers", RFC 1010,
  2092.        USC/Information Sciences Institute, May 1987.
  2093.  
  2094.  [12]  Postel, J., "The TCP Maximum Segment Size Option and Related
  2095.        Topics", RFC 879, USC/Information Sciences Institute, November
  2096.        1983.
  2097.  
  2098. Security Considerations
  2099.  
  2100.    Security issues are not addressed in this memo.
  2101.  
  2102. Author's Address
  2103.  
  2104.    This proposal is the product of the Point-to-Point Protocol Working
  2105.    Group of the Internet Engineering Task Force (IETF). The working
  2106.    group can be contacted via the chair:
  2107.  
  2108.    Russ Hobby
  2109.    UC Davis
  2110.    Computing Services
  2111.    Davis, CA 95616
  2112.  
  2113.    Phone: (916) 752-0236
  2114.  
  2115.    EMail: rdhobby@ucdavis.edu
  2116.  
  2117. Acknowledgments
  2118.  
  2119.    Many people spent significant time helping to develop the Point-to-
  2120.    Point Protocol.  The complete list of people is too numerous to list,
  2121.    but the following people deserve special thanks: Ken Adelman (TGV),
  2122.    Craig Fox (NSC), Phill Gross (NRI), Russ Hobby (UC Davis), David
  2123.    Kaufman (Proteon), John LoVerso (Xylogics), Bill Melohn (Sun
  2124.    Microsystems), Mike Patton (MIT), Drew Perkins (CMU), Greg Satz
  2125.    (cisco systems) and Asher Waldfogel (Wellfleet).
  2126.  
  2127.  
  2128.  
  2129.  
  2130. Perkins                                                        [Page 38]
  2131.